home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
AMICUS
/
AMICUS24.ADF
/
CodeDemo
/
Scroll.asm
< prev
next >
Wrap
Assembly Source File
|
1988-04-16
|
7KB
|
129 lines
ORIGIN START
PLANE1 EQUATE $00 ;DECLARE DATA OFFSETS
PLANE2 EQUATE $04 ;FROM PARAMETER REGISTER A0
SIZE EQUATE $08 ;PASSED FROM MODULA2
START MOVEM.L D0-D7/A0-A6,-(A7) ;SAVE REGISTERS ON STACK
CLR.L D7 ;CLEAR PLANE WIDTH REGISTER
MOVE.W SIZE(A0),D7 ;GET PLANE SIZE
BEQ QUIT ;QUIT IF SIZE IS ZERO
MOVE.L D7,D4 ;GET PLANESIZE
LSR #1,D4 ;SHIFT TO HALVE
SUBQ.L #1,D4 ;ADJUST FOR DBRA IN LOOP
DIVU #200,D7 ;CALCULATE PLANE WIDTH IN WORDS
SUBQ.W #2,D7 ;ADJUST FOR USE AS LOOP COUNT
MOVE.L #4,D1 ;INITIALIZE STROBE COUNTER
MOVE.L PLANE2(A0),A3 ;GET PLANE2 ADDRESS
MOVE.L #320,D6 ;TOTAL REPETITIONS
LOOP3 TST.W SIZE(A0) ;CHECK FOR INTERRUPT
BEQ QUIT ;QUIT IF CLEARED BY INTERRUPT
MOVE.L PLANE1(A0),A1 ;GET PLANE1 ADDRESS
MOVE.L PLANE2(A0),A2 ;GET PLANE2 ADDRESS
MOVE.L #199,D2 ;SET HORIZONTAL SIZE LOOP COUNT
LOOP2 MOVE.L D7,D3 ;RESET LOOP COUNTER
CLR.L D0 ;INITIALIZE BITCATCHER REGISTER
ASL (A1)+ ;START HORIZONTAL SHIFT OF PLANE1
BCC SKIP ;SKIP IF BIT WAS 0
BSET #0,D0 ;SAVE SHIFTED BIT
SKIP BTST.B #7,(A1) ;CHECK HIGH BIT OF NEXT WORD
BEQ SKIP1 ;SKIP IF BIT WAS 0
BSET.B #0,-1(A1) ;MOVE TO LOW BIT OF PREVIOUS WORD
SKIP1 ASL (A2)+ ;START HORIZONTAL SHIFT OF PLANE2
BCC SKIP2 ;SKIP IF BIT WAS 0
BSET #1,D0 ;SAVE SHIFTED BIT
SKIP2 BTST.B #7,(A2) ;CHECK HIGH BIT OF NEXT WORD
BEQ LOOP ;SKIP IF BIT WAS 0
BSET.B #0,-1(A2) ;MOVE TO LOW BIT OF PREVIOUS WORD
LOOP ASL (A1)+ ;SHIFT REST OF LINE IN PLANE1
BTST.B #7,(A1) ;CHECK HIGH BIT OF NEXT WORD
BEQ SKIP3 ;SKIP IF BIT WAS 0
BSET.B #0,-1(A1) ;MOVE TO LOW BIT OF PREVIOUS WORD
SKIP3 ASL (A2)+ ;SHIFT REST OF LINE IN PLANE2
BTST.B #7,(A2) ;CHECK HIGH BIT OF NEXT WORD
BEQ SKIP4 ;SKIP IF BIT WAS 0
BSET.B #0,-1(A2) ;MOVE TO LOW BIT OF PREVIOUS WORD
SKIP4 DBRA D3,LOOP ;LOOP TILL LINE DONE
BCLR.B #0,-1(A1) ;CLEAR LOW BIT OF LAST WORD
BCLR.B #0,-1(A2) ;CLEAR LOW BIT OF LAST WORD
BTST #0,D0 ;CHECK FOR BIT FROM START OF LINE
BEQ SKIP5 ;SKIP IF BIT WAS 0
ADDQ.B #1,-1(A1) ;SHIFT BIT FROM START OF LINE
SKIP5 BTST #1,D0 ;CHECK FOR BIT FROM START OF LINE
BEQ SKIP6 ;SKIP IF BIT WAS 0
ADDQ.B #1,-1(A2) ;SHIFT BIT FROM START OF LINE
SKIP6 DBRA D2,LOOP2 ;LOOP TILL PLANES ARE SHIFTED
DBRA D1,SKIPSTROBE ;SKIP COLOR CHANGE
MOVE.L D4,D5 ;GET PLANESIZE
MOVE.L A3,A4 ;GET PLANE ADDRESS
COLORLOOP MOVE.L (A4),D1 ;GET PLANELONGWORD
EORI.L #$80008000,D1 ;REVERSE BITS
MOVE.L D1,(A4)+ ;REPLACE PLANELONGWORD
DBRA D5,COLORLOOP ;LOOP
MOVE.L #4,D1 ;RESET COUNTER
SKIPSTROBE DBRA D6,LOOP3 ;LOOP TILL SCROLL DONE
;SCROLL PLANE1
MOVE.L #318,D6 ;TOTAL REPETITIONS
LOOP3A TST.W SIZE(A0) ;CHECK FOR INTERRUPT
BEQ QUIT ;QUIT IF CLEARED BY INTERRUPT
MOVE.L PLANE1(A0),A1 ;GET PLANE1 ADDRESS
MOVE.L #199,D2 ;SET HORIZONTAL SIZE LOOP COUNT
LOOP2A MOVE.L D7,D3 ;RESET LOOP COUNTER
CLR.L D0 ;INITIALIZE BITCATCHER REGISTER
ASL (A1)+ ;START HORIZONTAL SHIFT OF PLANE1
BCC SKIPA ;SKIP IF BIT WAS 0
BSET #0,D0 ;SAVE SHIFTED BIT
SKIPA BTST.B #7,(A1) ;CHECK HIGH BIT OF NEXT WORD
BEQ LOOPA ;SKIP IF BIT WAS 0
BSET.B #0,-1(A1) ;MOVE TO LOW BIT OF PREVIOUS WORD
LOOPA ASL (A1)+ ;SHIFT REST OF LINE IN PLANE1
BTST.B #7,(A1) ;CHECK HIGH BIT OF NEXT WORD
BEQ SKIP3A ;SKIP IF BIT WAS 0
BSET.B #0,-1(A1) ;MOVE TO LOW BIT OF PREVIOUS WORD
SKIP3A DBRA D3,LOOPA ;LOOP TILL LINE DONE
BCLR.B #0,-1(A1) ;CLEAR LOW BIT OF LAST WORD
BTST #0,D0 ;CHECK FOR BIT FROM START OF LINE
BEQ SKIP5A ;SKIP IF BIT WAS 0
ADDQ.B #1,-1(A1) ;SHIFT BIT FROM START OF LINE
SKIP5A DBRA D2,LOOP2A ;LOOP TILL PLANES ARE SHIFTED
DBRA D6,LOOP3A ;LOOP TILL SCROLL DONE
;SCROLL PLANE2
MOVE.L #318,D6 ;TOTAL REPETITIONS
LOOP3B TST.W SIZE(A0) ;CHECK FOR INTERRUPT
BEQ QUIT ;QUIT IF CLEARED BY INTERRUPT
MOVE.L PLANE2(A0),A1 ;GET PLANE1 ADDRESS
MOVE.L #199,D2 ;SET HORIZONTAL SIZE LOOP COUNT
LOOP2B MOVE.L D7,D3 ;RESET LOOP COUNTER
CLR.L D0 ;INITIALIZE BITCATCHER REGISTER
ASL (A1)+ ;START HORIZONTAL SHIFT OF PLANE1
BCC SKIPB ;SKIP IF BIT WAS 0
BSET #0,D0 ;SAVE SHIFTED BIT
SKIPB BTST.B #7,(A1) ;CHECK HIGH BIT OF NEXT WORD
BEQ LOOPB ;SKIP IF BIT WAS 0
BSET.B #0,-1(A1) ;MOVE TO LOW BIT OF PREVIOUS WORD
LOOPB ASL (A1)+ ;SHIFT REST OF LINE IN PLANE1
BTST.B #7,(A1) ;CHECK HIGH BIT OF NEXT WORD
BEQ SKIP3B ;SKIP IF BIT WAS 0
BSET.B #0,-1(A1) ;MOVE TO LOW BIT OF PREVIOUS WORD
SKIP3B DBRA D3,LOOPB ;LOOP TILL LINE DONE
BCLR.B #0,-1(A1) ;CLEAR LOW BIT OF LAST WORD
BTST #0,D0 ;CHECK FOR BIT FROM START OF LINE
BEQ SKIP5B ;SKIP IF BIT WAS 0
ADDQ.B #1,-1(A1) ;SHIFT BIT FROM START OF LINE
SKIP5B DBRA D2,LOOP2B ;LOOP TILL PLANES ARE SHIFTED
DBRA D6,LOOP3B ;LOOP TILL SCROLL DONE
QUIT MOVEM.L (A7)+,D0-D7/A0-A6 ;RESTORE REGISTERS FROM STACK
END ;FINISHED SCROLLING